package com.zhangxu.microservice.auth.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhangxu.microservice.auth.biz.dto.AssignRoleDTO;
import com.zhangxu.microservice.auth.biz.dto.EmployeeRoleDTO;
import com.zhangxu.microservice.auth.dao.condition.EmployeeRoleCondition;

import java.util.List;

/**
 * 员工角色关系服务接口
 */
public interface EmployeeRoleService {

    /**
     * 为员工分配角色
     *
     * @param assignRoleDTO 分配角色参数
     */
    void assignRoles(AssignRoleDTO assignRoleDTO);

    /**
     * 添加员工角色关系
     *
     * @param employeeId 员工ID
     * @param roleId 角色ID
     * @return 关系ID
     */
    Long addEmployeeRole(Long employeeId, Long roleId);

    /**
     * 删除员工角色关系
     *
     * @param id 关系ID
     */
    void deleteEmployeeRole(Long id);

    /**
     * 根据员工ID和角色ID删除关系
     *
     * @param employeeId 员工ID
     * @param roleId 角色ID
     */
    void deleteEmployeeRoleByIds(Long employeeId, Long roleId);

    /**
     * 根据员工ID删除所有角色关系
     *
     * @param employeeId 员工ID
     */
    void deleteByEmployeeId(Long employeeId);

    /**
     * 根据角色ID删除所有员工关系
     *
     * @param roleId 角色ID
     */
    void deleteByRoleId(Long roleId);

    /**
     * 根据员工ID获取角色关系列表
     *
     * @param employeeId 员工ID
     * @return 角色关系列表
     */
    List<EmployeeRoleDTO> getByEmployeeId(Long employeeId);

    /**
     * 根据角色ID获取员工关系列表
     *
     * @param roleId 角色ID
     * @return 员工关系列表
     */
    List<EmployeeRoleDTO> getByRoleId(Long roleId);

    /**
     * 分页查询员工角色关系
     *
     * @param condition 查询条件
     * @return 员工角色关系分页信息
     */
    IPage<EmployeeRoleDTO> employeeRolePage(EmployeeRoleCondition condition);
}